<?php
class ACheckListOperaciones{

	public function __construct() {}
	
	public function generarOrdenTrabajo(EFacade & $facade) 
	{
	
		$docChLO = & $facade->getDocumentRoot();
	    $workflowSA = & $facade->getWorkflow();
		$ezpdo_= getManager();
		$role=NULL;
		
		//$personalAsignado = array();
		
		$asignacion = $ezpdo_->create('MAsignacionPersona');
		$asignacion->tipoOcupacion = 2;
		$asignacion->esRealizadaPor = $docChLO->operador;
			
//		foreach($docChLO->empleados as $empleado){
//			$asignacion = $ezpdo_->create('MAsignacionPersona');
//			$asignacion->tipoOcupacion = 2;
//			$asignacion->esRealizadaPor = $empleado;
//			//$personalAsignado[] = $asignacion;
//		}
		
		$OT = $facade->session->create('DOrdenTrabajoOperaciones');
		
		$OT->personalAsignado = $asignacion;
		//echo '<BR>-- ',count($OT->personalAsignado);	
		$OT->checkList = $docChLO;
		$OT->areaTrabajo = $docChLO->areaTrabajo;
		//echo '<BR>-- ',$OT;
		if($docChLO->salidaReal){
			
			$hour = $docChLO->salidaReal->horaSalida;
			$min = $docChLO->salidaReal->minutoSalida;
			$seg = 00;
			
			$fecha = mktime($hour,$min,$seg,date('m'),date('d'),date('Y'));
			
			$OT->fechaInicioEjecucion = $fecha;
			
			$hour = $docChLO->salidaReal->horaLlegada;
			$min = $docChLO->salidaReal->minutoLlegada;
			
			$fecha = mktime($hour,$min,$seg,date('m'),date('d'),date('Y'));
			
			$OT->fechaFinEjecucion = $fecha;
			
			//die('cool');
		}
		else{
			if($docChLO->salidaEquipo){
				$hour = $docChLO->salidaEquipo->horaSalida;
				$min = $docChLO->salidaEquipo->minutoSalida;
				$seg = 00;
				
				$fecha = mktime($hour,$min,$seg,date('m'),date('d'),date('Y'));
				
				$OT->fechaInicioEjecucion = $fecha;
				
				$hour = $docChLO->salidaEquipo->horaLlegada;
				$min = $docChLO->salidaEquipo->minutoLlegada;
			
				$fecha = mktime($hour,$min,$seg,date('m'),date('d'),date('Y'));
				
				$OT->fechaFinEjecucion = $fecha;
				
				//die('cool');
			}
		}
		//echo"<br>1docRoot ",$OT;
		$newEfacade =& EFacade :: initWorkflow($facade->session, $OT, & $role);
		$transSet = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(),3);//tipo process
		$trans = $transSet->getTransByName('t1');
		$usuario=NULL;
		$newEfacade->fireTrans($trans, $usuario, "Crear",TRUE);
		$OT->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios
		$newEfacade->saveWorkflow();
	    //$docRoot->fechaSolicitudOrdenServicio= $docSA->fechaSolicitudOrdenServicio;
//				$docRoot->cantidadReal;
		$OT->commit();
		$OT->numero = $OT->getDocumentNumber();
		$role = NULL;
		//echo"<br>2docRoot ",$OT;	
		$OT->commit();

		$docChLO->epSetDirty(TRUE);
		$workflowSA = & $facade->getWorkflow();
		$workflowSA->epSetDirty(TRUE);
		$transSetSA = & EFacade :: getCurrentTransSetAuto($workflowSA, 2); //TYPE AUTO AGENT
		
		$transSA = $transSetSA->getTransByName('t3');
		$facade->fireTrans($transSA,$usuario,'Generar OT', TRUE);
		$docChLO->commit();
		$facade->saveWorkflow();
		
	}
	
	public function generarSolicitudMantenimiento(EFacade & $facade)
	{
	
		$docChLO = & $facade->getDocumentRoot();
	    $workflowSA = & $facade->getWorkflow();
		$ezpdo_=getManager();
		$role=NULL;
		$ezpdo_= getManager();
		
		$SM=$facade->session->create('DSolicitudMantenimiento');
		$SM->equipoAMantener = $docChLO->equipo;
		$SM->checkList = $docChLO;
		$SM->areaTrabajo = $ezpdo_->get('MAreaTrabajo',2);
		
		$placeSet = & EFacade :: getCurrentPlaceSet($workflowSA);
		$segunda = false;	
		if($placeSet->name=='ps7'){
			//echo "<br>viene de la 1ra transicion";
		}
		else{
			//echo "<br>viene de la 2da transicion";
			$segunda = true;
		}
		
		
		/*************** Mantenimiento Correctivo **************/
		if($docChLO->averia and $docChLO->descripcionAveria !=null){
			
			if($docChLO->tipoFalla){
				$man = $ezpdo_->create('MListaMantenimientoCorrectivo');
				$man->mantenimientoCorrectivo = $docChLO->tipoFalla;
				$man->descripcion = $docChLO->descripcionAveria;
				$SM->mantenimientoCorrectivo[] = $man;
			}
			else{					
				foreach($SM->equipoAMantener->esUnEquipo->sistemas as $sis){
					foreach($sis->subsistemas as $sub){
						foreach($sub->funcionSS as $funcionSS){
							foreach($funcionSS->seNotaPor as $modoFallas){
								if(count($modoFallas->tipoFalla)){
									$man = $ezpdo_->create('MListaMantenimientoCorrectivo');
									$man->mantenimientoCorrectivo = $modoFallas->tipoFalla;
									$man->descripcion = $docChLO->descripcionAveria;
									$SM->mantenimientoCorrectivo[] = $man;
								}
							}
							
						}
					}
				}
			}
//			if($docChLO->tipoFalla){
//				$query=("FROM MMantenimientoCorrectivo as t where t.fallareparada.tipoFalla = ?");
//				$lista=$ezpdo_->find($query,$docChLO->tipoFalla);
//				$man->mantenimientoCorrectivo = $lista;
//			}
//			
//			$man->descripcion = $docChLO->descripcionAveria;
//			$SM->mantenimientoCorrectivo[] = $man;
		}
		
		
		
		/*************** Mantenimiento Rutinario ***************/
		
		
//		$ruts = $ezpdo_->find('from MMantenimientoRutinario');
//		foreach($SM->equipoAMantener->esUnEquipo->sistemas as $sis){
//			foreach($sis->necesitaMantenimiento as $ru){
//				$SM->mantenimientoRutinario[] = $ru;
//			}
//		}
		/*******************************************************/
				
		$newEfacade =& EFacade :: initWorkflow($facade->session,  $SM, & $role);
		$transSet = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(),3);//tipo process
		$trans = $transSet->getTransByName('t1');
		$usuario=NULL;
		$newEfacade->fireTrans($trans, $usuario, "Crear",TRUE);
		$SM->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios
		$newEfacade->saveWorkflow();
		$SM->commit();
		$SM->numero = $SM->getDocumentNumber();
		$role = NULL;	
		$SM->commit();
		
		$docChLO->epSetDirty(TRUE);
		$workflowSA = & $facade->getWorkflow();
		$workflowSA->epSetDirty(TRUE);
		$transSetSA = & EFacade :: getCurrentTransSetAuto($workflowSA, 2); //TYPE AUTO AGENT
		
		$transSA = $transSetSA->getTransByName('t7');
		$facade->fireTrans($transSA,$usuario,'Generar SM', TRUE);
		$docChLO->commit();
		$facade->saveWorkflow();
		
	}
	
	public function culminarCheckList(EFacade & $facade)
	{
		$ezpdo_= getManager();
		
		$docChLO = & $facade->getDocumentRoot();
		$docChLO->epSetDirty(TRUE);
		$workflowSA = & $facade->getWorkflow();
		$workflowSA->epSetDirty(TRUE);
		$transSetSA = & EFacade :: getCurrentTransSetAuto($workflowSA, 2); //TYPE AUTO AGENT
		
		$SM=$facade->session->create('DSolicitudMantenimiento');
		$SM->equipoAMantener = $docChLO->equipo;
		$SM->checkList = $docChLO;
		$SM->areaTrabajo = $ezpdo_->get('MAreaTrabajo',2);
		//echo ' <br> 4-- ',$SM;
		
		/*************** Mantenimiento Correctivo **************/
		if($docChLO->averia and $docChLO->descripcionAveria !=null){
			//echo ' <hr> 4.9-- ';	
			if($docChLO->tipoFalla){
				$man = $ezpdo_->create('MListaMantenimientoCorrectivo');
				$man->mantenimientoCorrectivo = $docChLO->tipoFalla;
				$man->descripcion = $docChLO->descripcionAveria;
				$SM->mantenimientoCorrectivo[] = $man;
			}
			else{				
				foreach($SM->equipoAMantener->esUnEquipo->sistemas as $sis){//echo ' <hr> 4.7-- ';	
					foreach($sis->subsistemas as $sub){//echo ' <hr> 4.8-- ';	
						foreach($sub->funcionSS as $funcionSS){//echo ' <hr> 4.19-- ';	
							foreach($funcionSS->seNotaPor as $modoFallas){//echo ' <hr> 5.0-- ';	
								if(count($modoFallas->tipoFalla)){
									$man = $ezpdo_->create('MListaMantenimientoCorrectivo');
									$man->mantenimientoCorrectivo = $modoFallas->tipoFalla;
									$man->descripcion = $docChLO->descripcionAveria;
									$SM->mantenimientoCorrectivo[] = $man;
									//echo ' <hr> 5-- ',$SM;
								}
							}
							
						}
					}
				}
			}
			
			
//			if($docChLO->tipoFalla){
//				$query=("FROM MMantenimientoCorrectivo as t where t.fallareparada.tipoFalla = ?");
//				$lista=$ezpdo_->find($query,$docChLO->tipoFalla);
//				$man->mantenimientoCorrectivo = $lista;
//			}
//			
//			$man->descripcion = $docChLO->descripcionAveria;
//			$SM->mantenimientoCorrectivo[] = $man;
		}
		
		
		/*************** Mantenimiento Rutinario ***************/
		
		//$ruts = $ezpdo_->find('from MMantenimientoRutinario');
		foreach($SM->equipoAMantener->esUnEquipo->sistemas as $sis){//echo ' <hr> 5-1- ';
			foreach($sis->necesitaRevision as $ru){//echo ' <hr> 5-2- ';
				$mant = $ezpdo_->create('MListaMantenimientoRutinario');
				$mant->mantenimientoRutinario = $ru;
				$SM->mantenimientoRutinario[] = $mant;
			}
		}
		//echo ' <hr> 5-- ',$SM;
		//die('gggggggggg');
		/*************** Mantenimiento Preventivo **************/
		//NI JE JUPO
		/***************   **************/
		
		$newEfacade =& EFacade :: initWorkflow($facade->session,  $SM, & $role);
		$transSet = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(),3);//tipo process
		$trans = $transSet->getTransByName('t1');
		$usuario=NULL;
		$newEfacade->fireTrans($trans, $usuario, "Crear",TRUE);
		$SM->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios
		$newEfacade->saveWorkflow();
		$SM->commit();
		$SM->numero = $SM->getDocumentNumber();
		//echo ' <hr> 6-- ',$SM;
		$role = NULL;	
		$SM->commit();
		
		
		$usuario=NULL;
		$transSA = $transSetSA->getTransByName('t5');
		$facade->fireTrans($transSA,$usuario,'Culminar', TRUE);
		$docChLO->commit();
		$facade->saveWorkflow();
	}
}
?>